java字符串逐个分解_Java 字符串String(一)拆分

在java语言中,String是一个包含char数组、其他字段,方法组成的java类。而在我们的coding生涯中,字符串又往往是我们最常也是最多打交道的,因此下面的一些常用的方法列举一下:

toCharArray()//将此字符串转换为一个新的字符数组

Arrays.sort()//对数组进行排序

Arrays.toString(char[] a)//返回指定数组内容的字符串表示形式

charAt(int index)// //返回指定索引出的char值

length()//返回此字符串的长度

substring(int beginIndex) //返回一个新字符串,是原字符串的子串

substring(int beginIndex, int endIndex)//同上

Integer.valueOf(String s)//返回的是一个Integer对象

String.valueOf(int i)//返回int参数的字符串表示形式

接下来一个小问题:

Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.

For example, given

s = "leetcode",

dict = ["leet", "code"].

Return true because "leetcode" can be segmented as "leet code".

1、拿到这个题目,我一想首先到脑子的是遍历,挨个遍历一番,把指定的字符串从0到length来一下,看看与字典是否一样,一样的话就从这个index到length再比较一下。如果一样,那么就OK

下面是我自己写的搓搓的代码, 下面是调用的

1 public booleandivisionString (String targetS, String[] dict){2 String temp = null;3 int tmpi =0; //标识以及一部分匹配后,下一个的beginIndex

4 for(int i=1; i<= targetS.length(); i++){5 if(tmpi == 0){6 temp = targetS.substring(0, i);7 }else{8 temp=targetS.substring(tmpi, i);9 }10 for(int j=0; j< dict.length; j++){11 if(temp.equals(dict[j])){12 tmpi=i; //首次或者下次匹配后,next的beginIndex

13 break;14 }15 }16 }17 if(tmpi == targetS.length()){ //最后tmpi肯定要等于要鉴定的字符串的长度咯

18 return true;19 }else{20 return false;21 }22 }

2、不过当我看到网页例子的时候他的解法可能要比我的好那么一点

请看下面代码:

1 public boolean wordBreak(String s, Setdict) {2 boolean[] t = new boolean[s.length()+1];3 t[0] = true; //set first to be true, why?4 //Because we need initial state

5

6 for(int i=0; i

8 if(!t[i])9 continue;10

11 for(String a: dict){12 int len =a.length();13 int end = i +len;14 if(end >s.length())15 continue;16

17 if(t[end]) continue;18

19 if(s.substring(i, end).equals(a)){20 t[end] = true;21 }22 }23 }24 returnt[s.length()];25 }

看了一下这个思路的重点是以dict的内容和长度来对字符串比较,切割字符串的次数比我上个代码少了很多,效率上来说的话,如果数据量大了的话应该会明显好,

其实上面两个方法已经默认用到了Dynamic Programming方法,所以有时候algorithm这个东西又没有我们想的那么难

3、题目给的最基本的做法是一个递归,这里也把代码贴过来吧, 其实我蛮不喜欢递归这个东东的!

1 public boolean wordBreakNative(String s, Setdict) {2 return wordBreakHelper(s, dict, 0);3 }4

5 public boolean wordBreakHelper(String s, Set dict, intstart){6 if(start ==s.length())7 return true;8

9 for(String a: dict){10 int len =a.length();11 int end = start+len;12

13 //end index should be <= string length

14 if(end >s.length())15 continue;16

17 if(s.substring(start, start+len).equals(a))18 if(wordBreakHelper(s, dict, start+len))19 return true;20 }21

22 return false;23 }

希望有人能提出更好的方法!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值