博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Valid Word Abbreviation Leetcode
阅读量:5132 次
发布时间:2019-06-13

本文共 3255 字,大约阅读时间需要 10 分钟。

Given a non-empty string s and an abbreviation abbr, return whether the string matches with the given abbreviation.

A string such as "word" contains only the following valid abbreviations:

["word", "1ord", "w1rd", "wo1d", "wor1", "2rd", "w2d", "wo2", "1o1d", "1or1", "w1r1", "1o2", "2r1", "3d", "w3", "4"]

Notice that only the above abbreviations are valid abbreviations of the string "word". Any other string is not a valid abbreviation of "word".

Note:

Assume s contains only lowercase letters and abbr contains only lowercase letters and digits.

Example 1:

Given s = "internationalization", abbr = "i12iz4n":Return true.

 

Example 2:

Given s = "apple", abbr = "a2e":Return false.

 

 

反正每次自己七改八改然后看top solution就会觉得自己逻辑混乱。。。= =
以下是我写的代码,有点难懂。。。
public class Solution {    public boolean validWordAbbreviation(String word, String abbr) {        int index1 = 0;        int index2 = 0;        char[] a = word.toCharArray();        char[] b = abbr.toCharArray();        while (index1 < a.length && index2 < b.length) {            if (a[index1] != b[index2]) {                int num = 0;                if (index2 < b.length && b[index2] - '0' <= 0 || b[index2] - '0' > 9) {                    return false;                }                while (index2 < b.length && b[index2] - '0' >= 0 && b[index2] - '0' <= 9) {                    num = num * 10 + b[index2] - '0';                    index2++;                }                if (num == 0) {                    return false;                } else {                    int count = 0;                    while (count < num) {                        if (count < num && index1 > a.length - 1) {                            return false;                        }                        index1++;                        count++;                    }                }            } else {                index1++;                index2++;             }                    }        return index1 == a.length && index2  == b.length;    }}

看了下top solution重新写的

public class Solution {    public boolean validWordAbbreviation(String word, String abbr) {        int index1 = 0;        int index2 = 0;        char[] a = word.toCharArray();        char[] b = abbr.toCharArray();        while (index1 < a.length && index2 < b.length) {            if (a[index1] == b[index2]) {                index1++;                index2++;                continue;            }            if (b[index2] - '0' <= 0 || b[index2] - '0' > 9) {                System.out.println(1);                return false;            }            int num = 0;            while (index2 < b.length && b[index2] - '0' >= 0 && b[index2] - '0' <= 9) {                num = num * 10 + b[index2] - '0';                index2++;            }            index1 = index1 + num;            if (index1 < a.length && index2 < b.length && a[index1] != b[index2]) {                return false;            }        }        return index1 == a.length && index2  == b.length;    }}

其中

if (index1 < a.length && index2 < b.length && a[index1] != b[index2]) {                return false;            }

这里可以省略的。

整体思路就是如果一样,就continue,不一样就看第一个数字是不是0,是0就false。然后把数字取出来,给index1加上,看看最后两个是不是都恰好把数组遍历了一遍。

反正这道题到时候需要回顾的。。。不是这里错就是那里错。

 

转载于:https://www.cnblogs.com/aprilyang/p/6346314.html

你可能感兴趣的文章
linux下操作mysql
查看>>
【03月04日】A股滚动市盈率PE历史新低排名
查看>>
Xcode5和ObjC新特性
查看>>
jvm slot复用
查看>>
高并发系统数据库设计
查看>>
LibSVM for Python 使用
查看>>
入坑的开始~O(∩_∩)O~
查看>>
Centos 7.0 安装Mono 3.4 和 Jexus 5.6
查看>>
Windows 7 上安装Visual Studio 2015 失败解决方案
查看>>
iOS按钮长按
查看>>
Shell流程控制
查看>>
CSS属性值currentColor
查看>>
[Leetcode|SQL] Combine Two Tables
查看>>
《DSP using MATLAB》Problem 7.37
查看>>
ROS lesson 1
查看>>
js笔记
查看>>
c风格字符串函数
查看>>
python基础学习第二天
查看>>
java可重入锁reentrantlock
查看>>
浅谈卷积神经网络及matlab实现
查看>>